package rootpackege.spring.websocket.stompwebsocket;

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.simp.annotation.SubscribeMapping;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;

import rootpackege.spring.controller.websocket.stompIntercepter.HandshakeInterceptor;
import rootpackege.spring.controller.websocket.stomphander.HandshakeHandler;

/**
 * 测试stomp的时候 不要再加载WebSocketConfig了
 * @author BriansPC
 *
 */
@Configuration
@EnableWebSocket
@EnableWebSocketMessageBroker
public class StompWebsocketConfig extends AbstractWebSocketMessageBrokerConfigurer{
	/**
	 * 注册STOMP端点 客户端在订阅或发布消息到目的地路径之前，都会连接该端点
	 */
	@Override
	public void registerStompEndpoints(StompEndpointRegistry registry) {
		registry.addEndpoint("/basic")//页面中  通过连接该点 创建websocket连接，在websocket连接的基础之上才可以实现stomp的通讯
//		.setHandshakeHandler(new HandshakeHandler())
//		.addInterceptors(new HandshakeInterceptor())
//		.setAllowedOrigins("*")
		.withSockJS();
		
	}
	/**
	 * 配置rocket消息代理  如果不重写该方法，则自动在内存中中模拟
	 * rocketmq当前使用的是windows版本的，用户名密码需要自己设置，同时，需要使用stomp的路径和端口（配置文件config/activemq.xml中设置查看）
	 */
	@Override
	public void configureMessageBroker(MessageBrokerRegistry registry) {
		registry.enableStompBrokerRelay("/topic","/queue")
		.setRelayHost("127.0.0.1")//不要写成了 stomp://127.0.0.1  
		.setRelayPort(61613)//连接的端口是activemq的stomp对应的端口 不是tcp端口
		//账户设置 系统和客户端都必须设置，否则会连接失败
		.setSystemLogin("admin")//设置系统账户
		.setSystemPasscode("admin")
		.setClientLogin("admin")//设置客户端账户
		.setClientPasscode("admin");
		registry.setApplicationDestinationPrefixes("/app");
	}
	/**
	 * 配置了一个 简单的消息代理---运行成功！  且页面发送的json字符串能被后台的对象捕获并能获取对应信息
	 * 如果通过这种方式配置的消息代理  页面订阅所有的信息时，不再需要在url地址中加“/app”
	 * 而是直接访问@MessageMapping @SubscribeMapping所标注的路径
	 * 
	 */
/*    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.enableSimpleBroker("/app");
    }*/
	
}
